home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 4 / CU Amiga Magazine's Super CD-ROM 04 (1996)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1996-11].iso / magazine / psion / new / pl061b.lzx / run_me.opl < prev   
Text File  |  2006-02-04  |  3KB  |  127 lines

  1. PROC test:
  2.     LOCAL codeadr%,funcadr%,params%(2)
  3.     LOCAL array%(20)
  4.     local len%
  5.     local i%
  6.     
  7.     len%=15
  8.     
  9.     params%(1)=ADDR(array%(1))
  10.     params%(2)=len%
  11.     
  12.     codeadr%=plInit%:
  13.     print "address of code block is "; codeadr%
  14.     
  15.     funcadr%=plSym%:("fillArray",codeadr%)
  16.     print "address of function fillArray is "; funcadr%
  17.     
  18.     i%=codeadr%
  19.     print
  20.     print "code check" 
  21.     WHILE i% < codeadr%+50
  22.         print hex$(peekb(i%));" ";
  23.         i%=i%+1
  24.     ENDWH
  25.     print
  26.     print
  27.     
  28.     USR(codeadr%,funcadr%,addr(params%(1)),2,0)
  29.     
  30.     print "data check"
  31.     i%=1
  32.     while i%<21
  33.         print i%;":";array%(i%)
  34.         i%=i%+1
  35.     endwh
  36.     
  37.     GET
  38. ENDP
  39.  
  40.  
  41.  
  42.  
  43. REM--------------------------------------------------------------------
  44. REM               pLink C cross-linker OPL code output
  45.  
  46. REM    Call plInit to initialise the code
  47. REM    To call C functions from OPL, use:
  48. REM        USR(codeadr,funcadr%,paramadr%,nparams,0)
  49. REM    codeadr% is the address of the code array (returned by plInit%)
  50. REM    funcadr% is the address of the function (returned by plSym%)
  51. REM    paramadr% is the address of the parameters array
  52. REM    nparams% is the number of word-sized parameters
  53.  
  54. REM    Remember to read the conditions of use before running this code
  55. REM--------------------------------------------------------------------
  56.  
  57. PROC plInit%:
  58.   LOCAL plCode&(32)
  59.   LOCAL plReloc%(2)
  60.   LOCAL i%,tmp%,tmpadr%,codeadr%
  61.   plCode&(1)=&83EC8B55
  62.   plCode&(2)=&0B7400F9
  63.   plCode&(3)=&D903D903
  64.   plCode&(4)=&FF02EB83
  65.   plCode&(5)=&FFF9E237
  66.   plCode&(6)=&5DE58BD0
  67.   plCode&(7)=&EC8B55CB
  68.   plCode&(8)=&0006EC81
  69.   plCode&(9)=&46C75756
  70.   plCode&(10)=&E90000FA
  71.   plCode&(11)=&76FF0019
  72.   plCode&(12)=&0033E8FA
  73.   plCode&(13)=&8B02C483
  74.   plCode&(14)=&E2D1FA56
  75.   plCode&(15)=&03045E8B
  76.   plCode&(16)=&830789DA
  77.   plCode&(17)=&8B01FA46
  78.   plCode&(18)=&46390646
  79.   plCode&(19)=&E9037DFA
  80.   plCode&(20)=&08B9FFDC
  81.   plCode&(21)=&0095A100
  82.   plCode&(22)=&0603E0D3
  83.   plCode&(23)=&00E90093
  84.   plCode&(24)=&8B5E5F00
  85.   plCode&(25)=&55C35DE5
  86.   plCode&(26)=&EC81EC8B
  87.   plCode&(27)=&57560002
  88.   plCode&(28)=&0504468B
  89.   plCode&(29)=&00E90001
  90.   plCode&(30)=&8B5E5F00
  91.   plCode&(31)=&55C35DE5
  92.   plCode&(32)=&9090EC8B
  93.   plReloc%(1)=$0052
  94.   plReloc%(2)=$0058
  95.   codeadr%=ALLOC(153)
  96.   IF codeadr% = 0
  97.     raise -10
  98.   ENDIF
  99.   i% = 1
  100.   WHILE i% <= 32
  101.     POKEL codeadr% + ((i% - 1)*4), plCode&(i%)
  102.     i% = i% + 1
  103.   ENDWH
  104.   i%=1
  105.   WHILE i%<3
  106.     tmpadr%=codeadr% + plReloc%(i%)
  107.     tmp%=PEEKW(tmpadr%)
  108.     POKEW tmpadr%,tmp%+codeadr%
  109.     i%=i%+1
  110.   ENDWH
  111.   RETURN codeadr%
  112. ENDP
  113.  
  114. PROC plSym%:(symbol$,codeadr%)
  115.   if symbol$="public"
  116.     return (codeadr% + 147)
  117.   endif
  118.   if symbol$="fillArray"
  119.     return (codeadr% + 25)
  120.   endif
  121.   if symbol$="plusTwo"
  122.     return (codeadr% + 123)
  123.   endif
  124. raise -38
  125. ENDP
  126.  
  127.